import {defineStore} from "pinia";
import {ref} from 'vue'
import router from "@/router/index.js";

export const useTabsStore = defineStore('tabs', () => {
        const tabs = ref([]) //存储访问过的页面标签
        const activeTab = ref('') //当前激活的标签

        //添加标签
        const addTab = (tab) => {
            // 标签数量限制（例如最多20个）
            const MAX_TABS = 20
            if (tabs.value.length >= MAX_TABS) {
                // 移除最旧的非仪表盘标签
                const indexToRemove = tabs.value.findIndex(t => t.path !== '/app/dashboard')
                if (indexToRemove !== -1) {
                    tabs.value.splice(indexToRemove, 1)
                }
            }

            //检查是否已经存在
            const existingTab = tabs.value.find(t => t.path === tab.path)
            if (!existingTab) {
                // 新标签，添加到列表
                tabs.value.push(tab)
            } else {
                // 已存在，更新信息（比如title可能变了）
                Object.assign(existingTab, tab)
            }
            setActiveTab(tab.path)
        }

        // 设置当前激活的标签
        const setActiveTab = (path) => {
            activeTab.value = path
        }

        //删除标签
        const removeTab = (path) => {
            const index = tabs.value.findIndex(tab => tab.path === path)
            if (index === -1) return

            const wasActive = activeTab.value === path
            tabs.value.splice(index, 1)

            // 如果关闭的是当前激活的标签，并且还有其他标签
            if (wasActive && tabs.value.length > 0) {
                // 智能选择下一个激活的标签：优先选择左边的，如果没有就选右边的
                const newIndex = Math.min(index, tabs.value.length - 1)
                const newActiveTab = tabs.value[newIndex].path
                setActiveTab(newActiveTab)
                router.push(newActiveTab)
            }

            // 如果关闭后没有标签了，跳转到仪表盘
            if (tabs.value.length === 0) {
                router.push('/app/dashboard')
            }
        }

        const initTabs = () => {
            // 获取所有有效路由路径
            const validPaths = router.getRoutes().map(route => route.path)

            // 清理无效的标签
            tabs.value = tabs.value.filter(tab =>
                validPaths.includes(tab.path) &&
                tab.path !== '/500' &&
                tab.path !== '/404' &&
                !tab.path.startsWith('/:pathMatch')
            )

            // 确保仪表盘标签存在且是第一个
            const dashboardIndex = tabs.value.findIndex(tab => tab.path === '/app/dashboard')
            if (dashboardIndex === -1) {
                // 添加仪表盘标签
                tabs.value.unshift({
                    path: '/app/dashboard',
                    title: '仪表盘',
                    meta: {}
                })
            } else if (dashboardIndex > 0) {
                // 如果仪表盘不在第一个位置，移动到第一个
                const [dashboardTab] = tabs.value.splice(dashboardIndex, 1)
                tabs.value.unshift(dashboardTab)
            }

            // 确保有激活的标签
            if (!activeTab.value && tabs.value.length > 0) {
                activeTab.value = tabs.value[0].path
            }
        }

        // 调试方法
        const debugTabs = () => {
            console.log('当前标签:', tabs.value)
            console.log('激活标签:', activeTab.value)
        }

        return {tabs, activeTab, addTab, removeTab, setActiveTab, initTabs, debugTabs}

    }, {
        // 启用持久化配置
        persist: {
            key: 'tabs-storage', // 存储的key
            storage: localStorage, // 存储方式
            paths: ['tabs', 'activeTab'], // 需要持久化的状态
            // 可选：序列化器，处理特殊数据类型
            serializer: {
                serialize: JSON.stringify,
                deserialize: JSON.parse
            }
        }
    }
)